<!--
 * @Descripttion: 
 * @version: 
 * @Author: Zuo
 * @Date: 2021-08-04 16:05:22
 * @LastEditors: Zuo
 * @LastEditTime: 2021-08-04 16:29:14
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        /*
            目标: 进一步掌握async/await的语法和使用
            mdn文档:
            https: //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function
            https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await
            1. async 函数
            函数的返回值为promise对象
            promise对象的结果由async函数执行的返回值决定
            2. await 表达式
            await右侧的表达式一般为promise对象, 但也可以是其它的值
            如果表达式是promise对象, await返回的是promise成功的值
            如果表达式是其它值, 直接将此值作为await的返回值
            3. 注意:
            await必须写在async函数中, 但async函数中可以没有await
            如果await的promise失败了, 就会抛出异常, 需要通过try...catch来捕获处理
        */
        // async返回一个promise对象
        // promise的结果由函数执行的结果决定。
        async function func1(){
            // return 1
            // throw 2

            return new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    resolve(4)
                },1000)
            })
        }
        const a = func1();
        a.then(
            value =>{
                console.log(value)
            }
        )


        function func2(){
            return new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    reject(5)
                },1000)
            })
        }

        async function func3(){
            /// await 右侧表达式为promise 得到的结果就是promise成功的value
            //失败的结果用try catch 捕获
            try{
                const value = await func2();
                console.log('func3',value)
            }catch(error){
                console.log(error);
            }
           


   
        }

        func3()
    </script>
</body>
</html>